#ifndef TIMEPICKERDIALOG_H
#define TIMEPICKERDIALOG_H

#include "FramelessWindow.h"
#include <QTime>
#include <QLabel>
#include <QSpinBox>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QButtonGroup>
#include <QScrollArea>

/**
 * @brief 自定义SpinBox，强制显示两位数
 */
class TwoDigitSpinBox : public QSpinBox
{
public:
    TwoDigitSpinBox(QWidget* parent = nullptr) : QSpinBox(parent) {}
    
protected:
    QString textFromValue(int value) const override {
        return QString("%1").arg(value, 2, 10, QChar('0'));
    }
};

/**
 * @brief 时间选择对话框
 * 
 * 提供直观的时间选择界面，支持：
 * - 快捷时间选项（整点、半点等）
 * - 小时/分钟滚轮选择器
 * - 当前时间快速选择
 */
class TimePickerDialog : public FramelessWindow
{
    Q_OBJECT
public:
    explicit TimePickerDialog(const QTime& initialTime = QTime::currentTime(), 
                             QWidget* parent = nullptr);
    ~TimePickerDialog();

    /**
     * @brief 获取用户选择的时间
     * @return 选择的时间
     */
    QTime selectedTime() const;

    /**
     * @brief 设置对话框标题
     * @param title 标题文本
     */
    void setDialogTitle(const QString& title);
    
    /**
     * @brief 模拟 QDialog 的 exec() 方法
     * @return QDialog::Accepted (1) 或 QDialog::Rejected (0)
     */
    int exec();
    
    /**
     * @brief 接受对话框
     */
    void accept();
    
    /**
     * @brief 拒绝对话框
     */
    void reject();

signals:
    void timeSelected(const QTime& time);
    void accepted();
    void rejected();

private slots:
    void onHourChanged(int hour);
    void onMinuteChanged(int minute);
    void onQuickTimeClicked(int id);
    void onNowClicked();
    void onConfirm();
    void onCancel();

private:
    void setupUI();
    void setupTitleBar();
    void setupTimeSelector();
    void setupQuickOptions();
    void setupButtons();
    void applyStyles();
    void updateTimeDisplay();
    void setTime(const QTime& time);

    // UI 组件
    QLabel* m_titleLabel;
    QLabel* m_timeDisplayLabel;
    
    // 时间选择器
    TwoDigitSpinBox* m_hourSpinBox;
    TwoDigitSpinBox* m_minuteSpinBox;
    QLabel* m_colonLabel;
    
    // 快捷选项
    QButtonGroup* m_quickTimeGroup;
    QScrollArea* m_quickScrollArea;
    
    // 底部按钮
    QPushButton* m_btnNow;
    QPushButton* m_btnConfirm;
    QPushButton* m_btnCancel;
    
    // 布局
    QVBoxLayout* m_mainLayout;
    QWidget* m_contentWidget;
    
    // 数据
    QTime m_currentTime;
    int m_result = 0;  // 对话框结果：0=Rejected, 1=Accepted
    
    // 常量
    static constexpr int DIALOG_WIDTH = 520;
    static constexpr int DIALOG_HEIGHT = 580;
};

#endif // TIMEPICKERDIALOG_H
